using UnityEngine;

/// <summary>
/// 用于调试金币碰撞检测的临时脚本
/// 附加到金币游戏对象上，记录所有与金币发生碰撞的对象
/// </summary>
public class DebugCoinCollision : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("DebugCoinCollision脚本初始化: " + gameObject.name);
        
        // 记录金币的基本信息
        Collider collider = GetComponent<Collider>();
        if (collider != null)
        {
            Debug.Log("金币碰撞器信息: 类型=" + collider.GetType().Name + ", 大小=" + collider.bounds.size + ", 是触发器=" + collider.isTrigger);
        }
        
        Rigidbody rb = GetComponent<Rigidbody>();
        if (rb != null)
        {
            Debug.Log("金币刚体信息: 是运动学=" + rb.isKinematic + ", 质量=" + rb.mass);
        }
    }
    
    /// <summary>
    /// 当任何物体进入金币的触发器时调用
    /// </summary>
    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("金币触发器检测到进入: " + other.gameObject.name);
        Debug.Log("碰撞对象标签: " + other.gameObject.tag);
        Debug.Log("碰撞对象层级: " + LayerMask.LayerToName(other.gameObject.layer));
        
        // 记录碰撞对象的碰撞器和刚体信息
        Collider otherCollider = other.GetComponent<Collider>();
        if (otherCollider != null)
        {
            Debug.Log("碰撞对象碰撞器类型: " + otherCollider.GetType().Name + ", 是触发器=" + otherCollider.isTrigger);
        }
        
        Rigidbody otherRb = other.GetComponent<Rigidbody>();
        if (otherRb != null)
        {
            Debug.Log("碰撞对象刚体信息: 是运动学=" + otherRb.isKinematic + ", 质量=" + otherRb.mass);
        }
        
        // 检查碰撞对象是否是玩家
        if (other.CompareTag("Player") || other.name.Contains("Player"))
        {
            Debug.Log("检测到玩家与金币发生碰撞！");
            // 尝试直接销毁金币（备用方案）
            Debug.Log("备用方案：尝试直接销毁金币");
            
            // 先禁用渲染器和碰撞器提供视觉反馈
            MeshRenderer renderer = GetComponent<MeshRenderer>();
            if (renderer != null)
            {
                renderer.enabled = false;
                Debug.Log("备用方案：已禁用金币渲染器");
            }
            
            if (GetComponent<Collider>() != null)
            {
                GetComponent<Collider>().enabled = false;
                Debug.Log("备用方案：已禁用金币碰撞器");
            }
            
            // 延迟销毁金币，给CoinCollector组件足够的时间处理
            Destroy(gameObject, 0.1f);
            Debug.Log("备用方案：已安排金币延迟销毁");
        }
    }
    
    /// <summary>
    /// 当任何物体与金币发生碰撞时调用（非触发器碰撞）
    /// </summary>
    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log("金币检测到物理碰撞: " + collision.gameObject.name);
        Debug.Log("碰撞对象标签: " + collision.gameObject.tag);
        Debug.Log("碰撞力大小: " + collision.impulse.magnitude);
        
        // 如果金币与玩家发生物理碰撞（非触发器碰撞），这表明触发器配置可能有问题
        if (collision.gameObject.CompareTag("Player") || collision.gameObject.name.Contains("Player"))
        {
            Debug.LogWarning("警告：玩家与金币发生了物理碰撞，而不是触发器碰撞！");
            Debug.LogWarning("这表明金币的触发器配置可能有问题，或者玩家的碰撞器配置有问题");
        }
    }
    
    private void OnDestroy()
    {
        Debug.Log("DebugCoinCollision: 金币对象已销毁");
    }
}